const IORedis = require('ioredis');

const url = 'redis://:dawan0528@101.37.75.144:6379';
const redis = new IORedis(url, {
    connectTimeout: 5000,
    maxRetriesPerRequest: 3,
    retryStrategy(times) {
        const delay = Math.min(times * 200, 2000);
        return times > 5 ? null : delay;
    },
});

// function once(emitter, event) {
//     return new Promise((resolve, reject) => {
//         const ok = (...args) => { cleanup(); resolve(args); };
//         const ko = (err) => { cleanup(); reject(err); };
//         const cleanup = () => { emitter.off('ready', ok); emitter.off('error', ko); };
//         emitter.once('ready', ok);
//         emitter.once('error', ko);
//     });
// }
//
// async function run() {
//     redis.on('connect', () => console.log('[redis] connect'));
//     redis.on('ready',   () => console.log('[redis] ready'));
//     redis.on('reconnecting', () => console.log('[redis] reconnecting...'));
//     redis.on('end',     () => console.log('[redis] end'));
//     redis.on('error',   (e) => console.error('[redis] error:', e?.message || e));
//
//     await once(redis, 'ready');
//
//     const pong = await redis.ping();
//     console.log('[redis] PING =>', pong);
//
//     const key = 'healthcheck:ioredis';
//     const val = String(Date.now());
//     await redis.set(key, val, 'EX', 5);
//     const got = await redis.get(key);
//     console.log('[redis] SET/GET =>', got === val ? 'OK' : `Mismatch: ${got}`);
//
//     await redis.quit();
//     console.log('[redis] quit');
// }
//
// run()
//     .then(() => process.exit(0))
//     .catch((e) => { console.error(e); try { redis.disconnect(); } catch {} process.exit(1); });

module.exports = {redis}